합격의 길잡이! 30년 전통의 기술자격증 전문학원 대방전기통신학원
정보통신 사회에 창의적으로 대처할 수 있는 유능한 기술 자격증 취득에 전원합격을 목표로 합니다.
상담가능시간 10:00 ~ 21:00
(공휴일 휴무)
전자산업기사 아두이노 관련 질문입니다 | |
---|---|
|
|
아두이노 공개문제 1번 동작 시 센서모드에서 두 가지 문제가 있습니다.
1. 온도측정 시 약 70도 정도로 높게 나옵니다. 코딩이나 회로 구성에 문제가 있는지 확인 부탁드리겠습니다.
2.초음파 발생기의 거리를 시리얼모니터로 확인 시 계속 0cm만 찍힙니다. trig와 echo핀 번호도 계속 확인해보고 핀 숫자도 바꿔봤는데 계속 동일하네요..
회로 사진과 해당 아두이노 코드문 첨부합니다.(main탭, temp탭, ultra탭)
#include #include LiquidCrystal_I2C lcd(0x27, 16, 2); #include const int sw1_pin = 8; const int sw2_pin = 9; const int sw3_pin = 10; int sw1_state = 0; int sw2_state = 0; int sw3_state = 0; int sw1_flag = 0; int sw2_flag = 0; int sw3_flag = 0; int sw1_old = 1; int sw2_old = 1; int sw3_old = 1;
int sw1_pulse_mode_flag = 0; int sw1_sensor_mode_flag = 0; int sw2_pulse_mode_flag = 0; int sw2_sensor_mode_flag = 0; int sw3_select_mode_flag = 0;
int start_mode_flag = 1; long reset_timer = 0;
//timer,temp, cds, ultra int timer_pin = 5; float pw; float peri; int freq; int timer_mode_flag = 0;
int temp_pin = A0; float temp_val = 0; float temp = 0;
int cds_pin = A1; int cds_val = 0; float cds_volt = 0;
int trig_pin = 2; int echo_pin = 3; int distance = 0; float duration = 0; int i = 0; int j = 0;
byte b00[8] {00,00,00,00,00,00}; byte b16[8] {16,16,16,16,16,16}; byte b24[8] {24,24,24,24,24,24}; byte b28[8] {28,28,28,28,28,28}; byte b30[8] {30,30,30,30,30,30}; byte b31[8] {31,31,31,31,31,31};
void setup() { pulse_mode_setup(); sw_mode_setup(); ultra_mode_setup();
lcd.createChar(0, b00); lcd.createChar(1, b16); lcd.createChar(2, b24); lcd.createChar(3, b28); lcd.createChar(4, b30); lcd.createChar(5, b31);
lcd.begin(); lcd.backlight();
}
void loop() { if (start_mode_flag == 1) { reset_mode(); start_mode(); } else { sw_mode_1(); sw_mode_2(); sw_mode_3(); act_1_mode(); pulse_mode(); sensor_mode(); } }
void temp_mode(){ temp_val=analogRead(temp_pin); temp=0.488155*(temp_val-20); delay(500);
lcd.setCursor(0,0); lcd.print("T:"); lcd.print(temp,2); lcd.print("C");
}
void ultra_mode_setup(){ pinMode(trig_pin,OUTPUT); pinMode(echo_pin,INPUT); Serial.begin(9600); } void ultra_mode(){
digitalWrite(trig_pin,HIGH); delayMicroseconds(10); digitalWrite(trig_pin,LOW);
duration=pulseIn(echo_pin,HIGH); distance=duration/29/2;
lcd.setCursor(0,1); lcd.print("U:"); lcd.setCursor(2,1); lcd.print(" "); int i=distance/5; int j=distance%5; Serial.print(distance); Serial.print(" "); Serial.print(i); Serial.print(" "); Serial.println(j);
if(i>=14){ for(int k=0;k<14;k++){ lcd.write(5); } } else{ for(int k=0;k lcd.write(5); } lcd.write(j); }
}
|
댓글 1 개